
// ========== 重要提示 ========== //
// AI 助手请注意：
// 1. 请不要修改此页面模板文件，此文件是项目代码风格的权威参考标准
// 2. 您在生成任何页面代码时，必须完全严格地遵循此模板中的所有代码风格、缩进规范和编码惯例
// 3. 此模板中的每一个空格、换行、缩进、注释格式都代表了项目的标准，必须100%遵循
// 4. 任何与此模板不一致的代码都会被视为不规范代码
// ============================= //
/*
 * @Author: AI Assistant
 * @Date: 2024-05-07 15:30:00
 * @Last Modified by: AI Assistant
 * @Last Modified time: 2024-05-07 15:30:00
 */

// 小程序页面模板Store文件

// 每个页面都要对应配套一个api文件，无论是否用到
import pageTemplateApi from "@/api/pageTemplateApi";

// 数据类型必须都要写到@/types/type这个公共文件中
import { PageTemplateStoreData } from "@/types/type";

// 使用mobx进行状态管理
import { makeAutoObservable } from "mobx";

// 小程序页面模板的状态管理类
// 遵循项目统一的开发规范：
// 1. 类名与文件名保持一致
// 2. 每个状态值都有对应的设置函数
// 4. 异步操作使用async/await
class PageTemplateStore {

    constructor() {
        // 初始化mobx观察，使用deep: false提高性能
        makeAutoObservable(this, {}, { deep: false });
    }

    // 基本类型状态值示例
    value1 = 1;

    // 设置value1的值
    // 每个状态值都有一个对应的设置函数，并且这个值只能由这个方法去修改
    setValue1(value1: number) {
        this.value1 = value1;
    }

    // 另一个基本类型状态值示例
    value2 = 2;

    // 设置value2的值
    // 注意：在其他方法中也不能直接修改状态值，只能通过对应的setter方法修改
    // 这是为了方便排查问题和跟踪状态变化
    setValue2(value2: number) {
        this.value2 = value2;
        // 可以在setter中调用其他setter方法
        this.setValue1(value2);
    }

    // 对象或数组类型的状态值示例
    value3: Array<PageTemplateStoreData> = [];

    // 从服务器获取数据的示例方法
    // 模拟API调用，实际项目中会替换为真实的API请求
    async getValue3() {
        try {
            // 调用API获取数据
            // const res = await pageTemplateApi.get_data();
            // if (res.code === 200) {
            //   this.value3 = res.data;
            // }

            // 模拟API调用成功的响应
            // 实际项目中应替换为真实的API调用
            await new Promise(resolve => setTimeout(resolve, 500)); // 模拟网络延迟

            // 模拟数据
            const mockData: PageTemplateStoreData[] = [
                { id: 1, name: '模板数据项1' },
                { id: 2, name: '模板数据项2' },
                { id: 3, name: '模板数据项3' }
            ];

            this.value3 = mockData;
            return true;
        } catch (error) {
            console.error('获取数据失败:', error);
            return false;
        }
    }

    // 添加新数据项
    addDataItem(item: PageTemplateStoreData) {
        this.value3.push({ ...item });
    }

    // 本地表单输入状态
    localValue = '';

    // 设置本地表单输入值
    setLocalValue(value: string) {
        this.localValue = value;
    }

    // 加载状态
    loading = false;

    // 设置加载状态
    setLoading(value: boolean) {
        this.loading = value;
    }

    // 加载页面数据
    async loadData() {
        this.setLoading(true);
        try {
            await this.getValue3();
        } catch (error) {
            console.error('加载数据失败:', error);
        } finally {
            this.setLoading(false);
        }
    }

    // 处理本地状态改变
    handleLocalValueChange(value: string) {
        this.setLocalValue(value);
    }

}

// 创建并导出Store实例
const pageTemplateStore = new PageTemplateStore();

export default pageTemplateStore;
